package com.cskaoyan.javase.thread._0introduction;

/**
 * 进程：程序运行起来后的状态就是进程,进程是操作系统分配资源的基本单位
 *      拿一个Java进程举例子,一个Java进程需要运行在JVM当中
 *      每当启动一个main方法,操作系统就会分配资源在内存中分配一个JVM实例
 *      一个JVM实例中,就有一套完整JVM运行数据区域(堆栈方法区...)
 *
 *
 * 线程: 就是进程当中一条执行路径,进程是包含线程的
 *      一个进程中最少有一个线程
 *      从Java程序的角度看，程序的一条执行路径（线程）也就是一条方法的调用链。以往我们把main方法作为程序的入口方法，启动main方法也就是启动了main线程，主线程。任何Java进程当中都会有主线程。
 *      启动main方法实际上就是启动了一个线程,以往我们写的java代码都是单线程的
 *      以往的Java程序都只有一条完整的执行路径
 *      CPU直接调度和执行一个线程,CPU总是在不同的线程之间进行切换,也包括在不同的进程的线程之间切换.
 *
 * 对于一个Java进程中的多个线程而言,它们共享的数据区域堆,方法区
 * 而方法调用栈是线程私有的,不会共享
 *
 * 堆是用于存储数据的,所以它是被共享的
 * 为什么方法调用栈是线程私有的呢?
 * 一个线程就代表一条完整的执行路径,实际上就是一条完整的方法调用
 * 所以方法调用栈必然是不能共享的,它们必须得有自身独立的方法调用栈
 *
 * 对于一个普通的Java进程而言,它是单线程的还是多线程的?
 * Java进程一定是多线程的,一个Java进程至少有三个线程:
 *      main线程,主线程
 *      异常处理线程
 *      GC垃圾回收线程
 *
 * @since 14:36
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        test();
        System.out.println(Runtime.getRuntime().availableProcessors());
    }

    private static void test() {
        test2();
    }

    private static void test2() {

    }
}
